#!/bin/bash
# 实时监控本机内存和硬盘剩余空间
# 当剩余内存小于500MB、根分区剩余空间小于1G时，发送报警邮件给root管理员

# 无限循环，持续监控
while : 
do
    # 提取根分区剩余空间（以KB为单位）
    disk_size=$(df / | awk '/\//{print $4}')
    # 提取内存剩余空间（同样以KB为单位）
    mem_size=$(free | awk '/Mem/{print $4}')
    
    # 判断条件：如果根分区剩余空间小于等于1024MB（即1024*1024KB）
    # 或内存剩余空间小于等于500MB（即500*1024KB）
    if [ $disk_size -le 1048576 ] || [ $mem_size -le 512000 ]; then
        # 发送邮件警报给root用户，邮件标题为"Warning"，内容为"Insufficient resources, 资源不足"
        echo "Insufficient resources, 资源不足. 服务器资源紧张，请尽快检查！" | mail -s "Warning" root
    fi
    
    # 休眠一段时间（例如60秒），避免过于频繁的监控导致资源消耗
    sleep 60
done

# 使用 fallocate -l 2G /tmp/largefile
# 这个命令会在/tmp目录中生成一个2GB的文件。
# 或使用dd生成大文件
# dd if=/dev/zero of=/tmp/bigfile bs=1M count=1024
# 本脚本测试于centos7 和 rocky9.4